package Colletion_Study.List_01;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;

public class CollectionDemo2 {
    /*
        Collection系列集合三种通用的遍历方式：
            1.迭代器遍历
            2.增强for遍历
            3.lambda表达式遍历

            迭代器遍历相关的三个方法：
                Iterator<E> iterator() : 获取一个迭代器对象
                boolean hasNext()      : 判断当前指向的位置是否有元素
                E next()               : 获取当前指向的元素并移动指针
            迭代器的细节注意点：
                1.报错NoSuchElementException 没有这个元素异常
                2.迭代器遍历完毕，指针不会复位
                3.循环中只能使用一次next方法
                4.迭代器遍历时，不能使用集合的方式进行增加或者删除（ConcurrentModificationException 并发修改异常）
                  如果要删除，可以调用迭代器提供的remove方法进行删除，添加暂时没有方法
     */

    public static void main(String[] args) {
        //1.创建集合并添加元素
        Collection<String> coll = new ArrayList<>();
        coll.add("aaa");
        coll.add("bbb");
        coll.add("ccc");
        coll.add("ddd");

        //2.获取迭代器对象
        System.out.println("--------------迭代器遍历-------------");
        //迭代器就好比是一个箭头，默认指向集合的0索引处
        Iterator<String> it = coll.iterator();
        //3.利用循环的方式不断的去获取集合中的每一个元素
        while (it.hasNext()) {
            //4.next方法的两件事，获取元素并移动指针
            System.out.println(it.next());
        }

        //增强for遍历
        //增强for循环的底层就是迭代器，简化了迭代器的书写
        //只有所有的单列集合和数组才能使用增强for进行遍历
        //修改增强for中的变量不会改变原数组的值
        System.out.println("----------------增强for遍历------------------");
        for (String s : coll) {
            System.out.println(s);
        }

        //lambda表达式遍历
        System.out.println("---------------lambda遍历-----------");
        coll.forEach(System.out::println);

    }
}
